package server.secretaria.aula;

import persistencia.dominio.*;
import persistencia.Persistencia;
import server.Singleton;
import server.aula.ControlAula;
import server.organizacion.ControlOrganizacion;
import server.solicitudAula.ControlSolicitudAula;
import comun.constantes.*;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.Vector;

public class HabilitarSubRecursosSecretaria {

 static Persistencia persistencia = null;
 static Connection conexionSQL = null;
 //Tipos de usuarios
 static TipoUsuario tipoUsuarioAdministrador = null;
 static TipoUsuario tipoUsuarioVeedor = null;
 static TipoUsuario tipoUsuarioDirector = null;
 static TipoUsuario tipoUsuarioWebMaster = null;
  
 //Los distintos tipos de Recursos
 static Recurso recursoAdministracion = null;
 static Recurso recursoAdministracionPlataforma = null;  
 static Recurso recursoBuscarUsuario = null;
 static Recurso recursoAgregarUsuario = null;
 static Recurso recursoAsignarUsuarioAula = null;
 static Recurso recursoCargaAlumnosArchivos = null;
 static Recurso recursoAsignarMiembrosEquipo = null;
 static Recurso recursoAsignarAlumnosComisiones = null; 
 static Recurso recursoListadoAlumnos = null;
 static Recurso recursoUsuariosActivos = null;
 static Recurso recursoAulasUsuario = null;
 static Recurso recursoAdministracionSolicitudesAula = null;
 static Recurso recursoCambiarEstadoAula = null;
 static Recurso recursoAgregarQuitar = null;
 static Recurso recursoCrearComisiones = null;
 static Recurso recursoCrearOrganizacion = null;
 static Recurso recursoConfiguracionAula = null;
 
 // Los distintos tipos de permisos
 static TipoPermiso tipoPermisoNinguno = null;
 static TipoPermiso tipoPermisoLectura = null;
 static TipoPermiso tipoPermisoEscritura = null;


  static public void initPersistencia(){
	  persistencia = new Persistencia();
	  persistencia.crearTransaccion();
	  //REGISTER DRIVER
	  try {
	      Driver d = (Driver)Class.forName(Singleton.driver).newInstance();
	  }catch (Exception e){
	      System.out.println(e);
	  }

	  //GET CONNECTION
	  conexionSQL=null;
	  try{
	      conexionSQL = DriverManager.getConnection(Singleton.url,Singleton.userName,Singleton.password);
	  }catch(Exception e){
	      System.out.println(e);
	  }
  }
 
  static public boolean commit(){
	 try {
		  persistencia.commit();
		  conexionSQL.close();
	      return true;
	  }catch(Exception ex){
		  ex.printStackTrace();
		  persistencia.rollback();
		  try{
		     conexionSQL.close();
		  }catch(SQLException ex1){
		      ex1.printStackTrace();
		      return false;
		  }
		     return false;
	  }
  }
 
  static public boolean rollback(){
	 try {
		 persistencia.rollback();
		 conexionSQL.close();
		 return true;
	 }catch (Exception ex){
		 ex.printStackTrace();
		 return false;
	 }
  }
   
  private static void cargarPermisoRecursoIndividual() throws Exception{	  
	  Curso aula = (Curso)persistencia.getObjectoPorId("persistencia.dominio.Aula",Long.valueOf("3478036229"));
	  System.out.println(aula.getNombre()); 
	  //crearPermiso(aula,recursoAdministracion,tipoPermisoEscritura,tipoUsuarioWebMaster);
	  for (Iterator j = aula.getAulas().iterator(); j.hasNext();) {
		   Comision comision = (Comision) j.next();
		   System.out.println(comision.getNombre());
		   crearPermiso(comision,recursoAdministracion,tipoPermisoEscritura,tipoUsuarioWebMaster);
	  }	  
  }
  
  private static void cargarSubRecursosNuevos(){	  
	  recursoAdministracionPlataforma = new Recurso();
	  recursoAdministracionPlataforma.setNombre(RECURSOS.ADMINISTRACION_PLATAFORMA);
	  recursoAdministracionPlataforma.setDescripcion(RECURSOS.ADMINISTRACION_PLATAFORMA);
	  persistencia.hacerPersistente(recursoAdministracionPlataforma);
	  
	  recursoCrearOrganizacion = new Recurso();
	  recursoCrearOrganizacion.setNombre(RECURSOS.CREAR_ORGANIZACION);
	  recursoCrearOrganizacion.setDescripcion(RECURSOS.CREAR_ORGANIZACION);
	  persistencia.hacerPersistente(recursoCrearOrganizacion);
	  
	  recursoBuscarUsuario = new Recurso();
	  recursoBuscarUsuario.setNombre(RECURSOS.BUSCAR_USUARIO);
	  recursoBuscarUsuario.setDescripcion(RECURSOS.BUSCAR_USUARIO);
	  persistencia.hacerPersistente(recursoBuscarUsuario);
	  
	  recursoAgregarUsuario = new Recurso();
	  recursoAgregarUsuario.setNombre(RECURSOS.AGREGAR_USUARIO);
	  recursoAgregarUsuario.setDescripcion(RECURSOS.AGREGAR_USUARIO);
	  persistencia.hacerPersistente(recursoAgregarUsuario);
	  
	  recursoAsignarUsuarioAula = new Recurso();
	  recursoAsignarUsuarioAula.setNombre(RECURSOS.ASIGNAR_USUARIO_A_UN_AULA);
	  recursoAsignarUsuarioAula.setDescripcion(RECURSOS.ASIGNAR_USUARIO_A_UN_AULA);
	  persistencia.hacerPersistente(recursoAsignarUsuarioAula);
	  
	  recursoCargaAlumnosArchivos = new Recurso();
	  recursoCargaAlumnosArchivos.setNombre(RECURSOS.CARGA_ALUMNOS_DESDE_ARCHIVO);
	  recursoCargaAlumnosArchivos.setDescripcion(RECURSOS.CARGA_ALUMNOS_DESDE_ARCHIVO);
	  persistencia.hacerPersistente(recursoCargaAlumnosArchivos);
	  
	  recursoAsignarMiembrosEquipo = new Recurso();
	  recursoAsignarMiembrosEquipo.setNombre(RECURSOS.ASIGNAR_MIEMBROS_EQUIPO_DOCENTE);
	  recursoAsignarMiembrosEquipo.setDescripcion(RECURSOS.ASIGNAR_MIEMBROS_EQUIPO_DOCENTE);
	  persistencia.hacerPersistente(recursoAsignarMiembrosEquipo);
	  
	  recursoAsignarAlumnosComisiones = new Recurso();
	  recursoAsignarAlumnosComisiones.setNombre(RECURSOS.ASIGNAR_ALUMNOS_COMISIONES);
	  recursoAsignarAlumnosComisiones.setDescripcion(RECURSOS.ASIGNAR_ALUMNOS_COMISIONES);
	  persistencia.hacerPersistente(recursoAsignarAlumnosComisiones);
	  
	  recursoListadoAlumnos = new Recurso();
	  recursoListadoAlumnos.setNombre(RECURSOS.LISTADO_ALUMNOS);
	  recursoListadoAlumnos.setDescripcion(RECURSOS.LISTADO_ALUMNOS);
	  persistencia.hacerPersistente(recursoListadoAlumnos);
	  
	  recursoUsuariosActivos = new Recurso();
	  recursoUsuariosActivos.setNombre(RECURSOS.USUARIOS_ACTIVOS);
	  recursoUsuariosActivos.setDescripcion(RECURSOS.USUARIOS_ACTIVOS);
	  persistencia.hacerPersistente(recursoUsuariosActivos);
	  
	  recursoAulasUsuario = new Recurso();
	  recursoAulasUsuario.setNombre(RECURSOS.AULAS_DE_UN_USUARIO);
	  recursoAulasUsuario.setDescripcion(RECURSOS.AULAS_DE_UN_USUARIO);
	  persistencia.hacerPersistente(recursoAulasUsuario);
	  
	  recursoAdministracionSolicitudesAula = new Recurso();
	  recursoAdministracionSolicitudesAula.setNombre(RECURSOS.ADMINISTRAR_SOLICITUDES_AULAS);
	  recursoAdministracionSolicitudesAula.setDescripcion(RECURSOS.ADMINISTRAR_SOLICITUDES_AULAS);
	  persistencia.hacerPersistente(recursoAdministracionSolicitudesAula);
	  
	  recursoCambiarEstadoAula = new Recurso();
	  recursoCambiarEstadoAula.setNombre(RECURSOS.CAMBIAR_ESTADO_AULAS);
	  recursoCambiarEstadoAula.setDescripcion(RECURSOS.CAMBIAR_ESTADO_AULAS);
	  persistencia.hacerPersistente(recursoCambiarEstadoAula);
	  
	  recursoCrearComisiones = new Recurso();
	  recursoCrearComisiones.setNombre(RECURSOS.CREAR_COMISIONES);
	  recursoCrearComisiones.setDescripcion(RECURSOS.CREAR_COMISIONES);
	  persistencia.hacerPersistente(recursoCrearComisiones);
	  
	  recursoAgregarQuitar = new Recurso();
	  recursoAgregarQuitar.setNombre(RECURSOS.AGREGAR_O_QUITAR_TIPO_DE_USUARIO);
	  recursoAgregarQuitar.setDescripcion(RECURSOS.AGREGAR_O_QUITAR_TIPO_DE_USUARIO);
	  persistencia.hacerPersistente(recursoAgregarQuitar);
	  
	  recursoConfiguracionAula = new Recurso();
	  recursoConfiguracionAula.setNombre(RECURSOS.CONFIGURACION_AULA);
	  recursoConfiguracionAula.setDescripcion(RECURSOS.CONFIGURACION_AULA);
	  persistencia.hacerPersistente(recursoConfiguracionAula);
  }  
  
   private static void crearPermiso(Aula aula, Recurso recurso, TipoPermiso tipoPermiso, TipoUsuario tipoUsuario){
		    PermisoAcceso permisoAcceso = new PermisoAcceso();
		    persistencia.hacerPersistente(permisoAcceso);
		    permisoAcceso.setRecurso(recurso);
		    permisoAcceso.setTipoPermiso(tipoPermiso);
		    permisoAcceso.setAula(aula);
		    permisoAcceso.setTipoUsuario(tipoUsuario);
	}  	
  	
    private static void crearPermisosAulaStandart(Aula aula){
	   crearPermiso(aula,recursoBuscarUsuario,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(aula,recursoBuscarUsuario,tipoPermisoEscritura,tipoUsuarioDirector);
	   crearPermiso(aula,recursoCargaAlumnosArchivos,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(aula,recursoCargaAlumnosArchivos,tipoPermisoEscritura,tipoUsuarioDirector);
	   crearPermiso(aula,recursoListadoAlumnos,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(aula,recursoListadoAlumnos,tipoPermisoEscritura,tipoUsuarioDirector);
	   crearPermiso(aula,recursoConfiguracionAula,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(aula,recursoConfiguracionAula,tipoPermisoEscritura,tipoUsuarioDirector);
       System.out.println("crearPermisosAulaStandart: "+aula.getNombre());
    }
   
    private static void crearPermisosAulaWebMaster(Aula aula){
  	   crearPermiso(aula,recursoBuscarUsuario,tipoPermisoEscritura,tipoUsuarioWebMaster);
 	   crearPermiso(aula,recursoCargaAlumnosArchivos,tipoPermisoEscritura,tipoUsuarioWebMaster);
  	   crearPermiso(aula,recursoAsignarMiembrosEquipo,tipoPermisoEscritura,tipoUsuarioWebMaster);
  	   crearPermiso(aula,recursoAsignarAlumnosComisiones,tipoPermisoEscritura,tipoUsuarioWebMaster);
  	   crearPermiso(aula,recursoListadoAlumnos,tipoPermisoEscritura,tipoUsuarioWebMaster);
  	   crearPermiso(aula,recursoCrearComisiones,tipoPermisoEscritura,tipoUsuarioWebMaster);
  	   crearPermiso(aula,recursoAgregarQuitar,tipoPermisoEscritura,tipoUsuarioWebMaster);
  	   crearPermiso(aula,recursoConfiguracionAula,tipoPermisoEscritura,tipoUsuarioWebMaster); 
        System.out.println("crearPermisosAulaWebMaster: "+aula.getNombre());
     }
    
    private static void crearPermisosAulaComun(Aula aula){
	   crearPermiso(aula,recursoBuscarUsuario,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(aula,recursoBuscarUsuario,tipoPermisoEscritura,tipoUsuarioDirector);
	   crearPermiso(aula,recursoCargaAlumnosArchivos,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(aula,recursoCargaAlumnosArchivos,tipoPermisoEscritura,tipoUsuarioDirector);
	   crearPermiso(aula,recursoAsignarMiembrosEquipo,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(aula,recursoAsignarMiembrosEquipo,tipoPermisoEscritura,tipoUsuarioDirector);
	   crearPermiso(aula,recursoAsignarAlumnosComisiones,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(aula,recursoAsignarAlumnosComisiones,tipoPermisoEscritura,tipoUsuarioDirector);
	   crearPermiso(aula,recursoListadoAlumnos,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(aula,recursoListadoAlumnos,tipoPermisoEscritura,tipoUsuarioDirector);
	   crearPermiso(aula,recursoCrearComisiones,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(aula,recursoCrearComisiones,tipoPermisoEscritura,tipoUsuarioDirector);
	   crearPermiso(aula,recursoAgregarQuitar,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(aula,recursoAgregarQuitar,tipoPermisoEscritura,tipoUsuarioDirector);
	   crearPermiso(aula,recursoConfiguracionAula,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(aula,recursoConfiguracionAula,tipoPermisoEscritura,tipoUsuarioDirector);
       System.out.println("crearPermisosAulaComun: "+aula.getNombre());
    }
   
    private static void crearPermisosOrganizacion(Aula aula){
 	   crearPermiso(aula,recursoBuscarUsuario,tipoPermisoEscritura,tipoUsuarioAdministrador);
 	   crearPermiso(aula,recursoBuscarUsuario,tipoPermisoEscritura,tipoUsuarioDirector);
 	   crearPermiso(aula,recursoAgregarUsuario,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(aula,recursoAgregarUsuario,tipoPermisoEscritura,tipoUsuarioDirector);
	   crearPermiso(aula,recursoAsignarUsuarioAula,tipoPermisoEscritura,tipoUsuarioAdministrador);
 	   crearPermiso(aula,recursoAsignarUsuarioAula,tipoPermisoEscritura,tipoUsuarioDirector);
 	   crearPermiso(aula,recursoUsuariosActivos,tipoPermisoEscritura,tipoUsuarioAdministrador);
 	   crearPermiso(aula,recursoUsuariosActivos,tipoPermisoEscritura,tipoUsuarioDirector);
 	   crearPermiso(aula,recursoAulasUsuario,tipoPermisoEscritura,tipoUsuarioAdministrador);
 	   crearPermiso(aula,recursoAulasUsuario,tipoPermisoEscritura,tipoUsuarioDirector);
 	   crearPermiso(aula,recursoCambiarEstadoAula,tipoPermisoEscritura,tipoUsuarioAdministrador);
 	   crearPermiso(aula,recursoCambiarEstadoAula,tipoPermisoEscritura,tipoUsuarioDirector);
       System.out.println("crearPermisosOrganizacion: "+aula.getNombre());
     }
    
    private static void crearPermisosOrganizacionWebMaster(Aula aula){
  	   crearPermiso(aula,recursoBuscarUsuario,tipoPermisoEscritura,tipoUsuarioWebMaster);
  	   crearPermiso(aula,recursoAgregarUsuario,tipoPermisoEscritura,tipoUsuarioWebMaster);
  	   crearPermiso(aula,recursoAsignarUsuarioAula,tipoPermisoEscritura,tipoUsuarioWebMaster);
  	   crearPermiso(aula,recursoUsuariosActivos,tipoPermisoEscritura,tipoUsuarioWebMaster);
  	   crearPermiso(aula,recursoAulasUsuario,tipoPermisoEscritura,tipoUsuarioWebMaster);
  	   crearPermiso(aula,recursoCambiarEstadoAula,tipoPermisoEscritura,tipoUsuarioWebMaster);
       System.out.println("crearPermisosOrganizacionWebMaster: "+aula.getNombre());
    }    
    
    private static void cargarPermisosSubRecursosSecretariaCampus() throws Exception{
 	   Aula campus = (Aula)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Organizacion","nombre==\""+TIPO_AULAS.CAMPUS+"\"").elementAt(0);
 	   crearPermiso(campus,recursoBuscarUsuario,tipoPermisoEscritura,tipoUsuarioVeedor);
    }   
    
    
    private static void cargarPermisosSuRecursos() throws Exception{
	   //Hay que revisar que Recurso va en cada nivel: Campus, Organizacion, Aula, Comision.
	   //Politica: Si un usuario tiene permiso en la Secretaria, entonces tendra permiso para todos los SubRecursos.
	   Vector aulas = null;
	   PermisoAcceso permisoAcceso = null;
	   Vector permisosAccesoSecretaria = null;
	   String filtro = "";
	   boolean aulaEstandar = false;
	   ControlSolicitudAula controlSolicitudAula = new ControlSolicitudAula(persistencia);
	   //Cargamos los permisos a los recursos correspondientes al Campus
	   Aula campus = (Aula)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Organizacion","nombre==\""+TIPO_AULAS.CAMPUS+"\"").elementAt(0);
	   crearPermiso(campus,recursoAdministracionPlataforma,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(campus,recursoAdministracionPlataforma,tipoPermisoEscritura,tipoUsuarioWebMaster);
	   crearPermiso(campus,recursoAdministracionSolicitudesAula,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(campus,recursoAdministracionSolicitudesAula,tipoPermisoEscritura,tipoUsuarioWebMaster);
	   crearPermiso(campus,recursoBuscarUsuario,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(campus,recursoBuscarUsuario,tipoPermisoEscritura,tipoUsuarioWebMaster);
	   crearPermiso(campus,recursoAgregarUsuario,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(campus,recursoAgregarUsuario,tipoPermisoEscritura,tipoUsuarioWebMaster);
	   crearPermiso(campus,recursoAsignarUsuarioAula,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(campus,recursoAsignarUsuarioAula,tipoPermisoEscritura,tipoUsuarioWebMaster);
	   crearPermiso(campus,recursoCambiarEstadoAula,tipoPermisoEscritura,tipoUsuarioAdministrador);
	   crearPermiso(campus,recursoCambiarEstadoAula,tipoPermisoEscritura,tipoUsuarioWebMaster);
	   crearPermiso(campus,recursoCrearOrganizacion,tipoPermisoEscritura,tipoUsuarioWebMaster);
	   System.out.println("ParaElCampus: "+campus.getNombre());
	   
	   filtro = "aulaCompuesta.id == "+campus.getId()+" & ( estadoAula.descripcion == \""+ESTADO_AULAS.EN_PREPARACION +"\" "+
       							" | estadoAula.descripcion == \""+ESTADO_AULAS.PRE_INSCRIPCION +"\" "+
       							" | estadoAula.descripcion == \""+ESTADO_AULAS.SELECCION +"\" "+
       							" | estadoAula.descripcion == \""+ESTADO_AULAS.ACTIVO +"\" )";
	   //Tratamos las aulas que estan en el Campus: como Tango, Seminarios SIAT, etc. Y sus Comisiones.	   
	   aulas = persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Curso",filtro);
	   
	   for (Iterator i = aulas.iterator(); i.hasNext();) {
		   Curso curso = (Curso) i.next();
		   aulaEstandar = controlSolicitudAula.cursoEsAulaEstandar(curso.getId());
		   crearPermisosAulaWebMaster(curso);
		   //Verificamos si en esta aula el administrador tiene permiso de escritura en la Secretaria
		   permisosAccesoSecretaria = persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.PermisoAcceso",
					"aula.id=="+curso.getId()+" && tipoUsuario.id=="+tipoUsuarioAdministrador.getId()+" && recurso.id=="+recursoAdministracion.getId());
		   if(!permisosAccesoSecretaria.isEmpty()){
			   permisoAcceso = (PermisoAcceso)permisosAccesoSecretaria.elementAt(0);
			   if(permisoAcceso.getTipoPermiso().getDescripcion().compareTo(TIPO_PERMISOS.ESCRITURA)==0){
				   if(aulaEstandar) crearPermisosAulaStandart(curso);
				   else crearPermisosAulaComun(curso);				   
			   }
		   }	   
		   
		   for (Iterator j = curso.getAulas().iterator(); j.hasNext();) {
			   Comision comision = (Comision) j.next();
			   crearPermisosAulaWebMaster(comision);
			   //Verificamos si en la comision el administrador tiene permiso de escritura en la Secretaria
			   permisosAccesoSecretaria = persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.PermisoAcceso",
						"aula.id=="+comision.getId()+" && tipoUsuario.id=="+tipoUsuarioAdministrador.getId()+" && recurso.id=="+recursoAdministracion.getId());
			   if(!permisosAccesoSecretaria.isEmpty()){
				   permisoAcceso = (PermisoAcceso)permisosAccesoSecretaria.elementAt(0);
				   if(permisoAcceso.getTipoPermiso().getDescripcion().compareTo(TIPO_PERMISOS.ESCRITURA)==0){
					   if(aulaEstandar) crearPermisosAulaStandart(comision);
					   else crearPermisosAulaComun(comision);				   
				   }
			   }
		   }		   		   
	   }
	   	   
	   //Tratamos las Organizaciones y cada una de las aulas que continen.
	   ControlOrganizacion controlOrganizacion = new ControlOrganizacion(persistencia);
	   Vector organizaciones = null;
	   organizaciones = controlOrganizacion.getOrganizacionesTipo(TIPO_AULAS.ORGANIZACION_POSGRADO);
	   organizaciones.addAll(controlOrganizacion.getOrganizacionesTipo(TIPO_AULAS.ORGANIZACION_INVESTIGACION_EVALUACION_PROYECTO));
	   organizaciones.addAll(controlOrganizacion.getOrganizacionesTipo(TIPO_AULAS.ORGANIZACION_GRADO));
	   
	   for (Iterator k = organizaciones.iterator(); k.hasNext();) {
		   Organizacion organizacion = (Organizacion) k.next();
		   crearPermisosOrganizacionWebMaster(organizacion);
		   permisosAccesoSecretaria = persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.PermisoAcceso",
					"aula.id=="+organizacion.getId()+" && tipoUsuario.id=="+tipoUsuarioAdministrador.getId()+" && recurso.id=="+recursoAdministracion.getId());
		   if(!permisosAccesoSecretaria.isEmpty()){
			   permisoAcceso = (PermisoAcceso)permisosAccesoSecretaria.elementAt(0);
			   if(permisoAcceso.getTipoPermiso().getDescripcion().compareTo(TIPO_PERMISOS.ESCRITURA)==0){
				   crearPermisosOrganizacion(organizacion);
			   }
		   }
		   filtro = "aulaCompuesta.id == "+organizacion.getId()+" & ( estadoAula.descripcion == \""+ESTADO_AULAS.EN_PREPARACION +"\" "+
				" | estadoAula.descripcion == \""+ESTADO_AULAS.PRE_INSCRIPCION +"\" "+
				" | estadoAula.descripcion == \""+ESTADO_AULAS.SELECCION +"\" "+
				" | estadoAula.descripcion == \""+ESTADO_AULAS.ACTIVO +"\" )";
		   aulas = persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Curso",filtro);
		   for (Iterator i = aulas.iterator(); i.hasNext();) {
			   Curso curso = (Curso) i.next();
			   aulaEstandar = controlSolicitudAula.cursoEsAulaEstandar(curso.getId());
			   crearPermisosAulaWebMaster(curso);
			   //Verificamos si en esta aula el administrador tiene permiso de escritura en la Secretaria
			   permisosAccesoSecretaria = persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.PermisoAcceso",
						"aula.id=="+curso.getId()+" && tipoUsuario.id=="+tipoUsuarioAdministrador.getId()+" && recurso.id=="+recursoAdministracion.getId());
			   if(!permisosAccesoSecretaria.isEmpty()){
				   permisoAcceso = (PermisoAcceso)permisosAccesoSecretaria.elementAt(0);
				   if(permisoAcceso.getTipoPermiso().getDescripcion().compareTo(TIPO_PERMISOS.ESCRITURA)==0){
					   if(aulaEstandar) crearPermisosAulaStandart(curso);
					   else crearPermisosAulaComun(curso);				   
				   }
			   }	 
			   
			   for (Iterator j = curso.getAulas().iterator(); j.hasNext();) {
				   Comision comision = (Comision) j.next();
				   crearPermisosAulaWebMaster(comision);
				   //Verificamos si en la comision el administrador tiene permiso de escritura en la Secretaria
				   permisosAccesoSecretaria = persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.PermisoAcceso",
							"aula.id=="+comision.getId()+" && tipoUsuario.id=="+tipoUsuarioAdministrador.getId()+" && recurso.id=="+recursoAdministracion.getId());
				   if(!permisosAccesoSecretaria.isEmpty()){
					   permisoAcceso = (PermisoAcceso)permisosAccesoSecretaria.elementAt(0);
					   if(permisoAcceso.getTipoPermiso().getDescripcion().compareTo(TIPO_PERMISOS.ESCRITURA)==0){
						   if(aulaEstandar) crearPermisosAulaStandart(comision);
						   else crearPermisosAulaComun(comision);				   
					   }
				   }
			   }		   		   
		   }
	   } 
   }
   
   private static void levantarTiposPermisos()throws Exception{
		tipoPermisoNinguno = (TipoPermiso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoPermiso","descripcion==\""+TIPO_PERMISOS.NINGUNO+"\" ").elementAt(0);
		tipoPermisoLectura = (TipoPermiso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoPermiso","descripcion==\""+TIPO_PERMISOS.LECTURA+"\" ").elementAt(0);
		tipoPermisoEscritura= (TipoPermiso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoPermiso","descripcion==\""+TIPO_PERMISOS.ESCRITURA+"\" ").elementAt(0);
		recursoAdministracion = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ADMINISTRACION+"\" ").elementAt(0);
  }
   
   private static void levantarTiposUsuarios()throws Exception{
	   tipoUsuarioAdministrador = (TipoUsuario)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre==\""+TIPO_USUARIOS.ADMINISTRADOR+"\" ").elementAt(0);
	   tipoUsuarioVeedor = (TipoUsuario)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre==\""+TIPO_USUARIOS.VEEDOR+"\" ").elementAt(0);
	   tipoUsuarioDirector = (TipoUsuario)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre==\""+TIPO_USUARIOS.DIRECTOR+"\" ").elementAt(0);
	   tipoUsuarioWebMaster = (TipoUsuario)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.TipoUsuario","nombre==\""+TIPO_USUARIOS.WEBMASTER+"\" ").elementAt(0);
   } 
   
   private static void levantarRecursos()throws Exception{
	    //Los distintos tipos de Recursos
		recursoAdministracionPlataforma = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ADMINISTRACION_PLATAFORMA+"\" ").elementAt(0);
		recursoAdministracionSolicitudesAula = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ADMINISTRAR_SOLICITUDES_AULAS+"\" ").elementAt(0);
		recursoAgregarQuitar = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.AGREGAR_O_QUITAR_TIPO_DE_USUARIO+"\" ").elementAt(0);
		recursoAgregarUsuario = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.AGREGAR_USUARIO+"\" ").elementAt(0);
		recursoAsignarAlumnosComisiones = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ASIGNAR_ALUMNOS_COMISIONES+"\" ").elementAt(0);
		recursoAsignarMiembrosEquipo = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ASIGNAR_MIEMBROS_EQUIPO_DOCENTE+"\" ").elementAt(0);
		recursoAsignarUsuarioAula = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.ASIGNAR_USUARIO_A_UN_AULA+"\" ").elementAt(0);
		recursoAulasUsuario = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.AULAS_DE_UN_USUARIO+"\" ").elementAt(0);
		recursoBuscarUsuario = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.BUSCAR_USUARIO+"\" ").elementAt(0);
		recursoCambiarEstadoAula = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.CAMBIAR_ESTADO_AULAS+"\" ").elementAt(0);
		recursoCargaAlumnosArchivos = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.CARGA_ALUMNOS_DESDE_ARCHIVO+"\" ").elementAt(0);
		recursoConfiguracionAula = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.CONFIGURACION_AULA+"\" ").elementAt(0);
		recursoCrearComisiones =(Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.CREAR_COMISIONES+"\" ").elementAt(0);
		recursoListadoAlumnos = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.LISTADO_ALUMNOS+"\" ").elementAt(0);
		recursoUsuariosActivos = (Recurso)persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.Recurso","nombre==\""+RECURSOS.USUARIOS_ACTIVOS+"\" ").elementAt(0);
   }
   
   public static void main(String[] args){
  		try{
  		  initPersistencia(); 
  		  System.out.println("=======================INICIO LA CARGA DE LA BD==========================");
  		  levantarTiposPermisos();
  		  levantarTiposUsuarios();
  		  //cargarSubRecursosNuevos();
  		  levantarRecursos();
  		  //cargarPermisosSuRecursos();
  		  cargarPermisosSubRecursosSecretariaCampus();
  		  System.out.println("=======================TERMINO LA CARGA DE LA BD==========================");
		  commit();
	  }catch(Exception ee){
		  rollback();
		  ee.printStackTrace();			
	  }  
    }
}